class code2 {
    //移掉 K 位数字
    //1   432219
    public String removeKdigits(String num, int k) {
        //特判
        if(num.length() == k) {
            return "0";
        }

        char[] ss = num.toCharArray();
        Stack<Character> st = new Stack<>();

        for(Character i:ss) {
            //比较
            while(!st.isEmpty() && i<st.peek() && k>0) {
                st.pop();
                k--;
            }
            //特殊情况
            if(st.isEmpty() && i== '0') {
                continue;
            }
            st.push(i);
        }

        //遍历完了，但是k不为0
        while(!st.isEmpty() && k>0) {
            st.pop();
            k--;
        }

        //这个是最后栈为空时，删除一位，比如我们的10，删除一位为0，按上面逻辑我们会返回""，所以我们让其返回"0"
        if(st.isEmpty()){
            return "0";
        }

        //反转并返回字符串
        StringBuilder str = new StringBuilder();
        while(!st.isEmpty()){
            str.append(st.pop());
        }

        return str.reverse().toString();

    }
}